package com.example.chapter06;

import android.util.Log;

import androidx.multidex.MultiDexApplication;
import androidx.room.Room;
import com.example.chapter06.database.CartDatabase;
import com.example.chapter06.database.DBManager;
import com.example.chapter06.database.GoodsDatabase;
import com.example.chapter06.database.UpLoader;

import java.util.HashMap;
import java.util.Timer;

public class MainApplication extends MultiDexApplication {
    private final static String TAG = "MainApplication";
    private static MainApplication mApp; // 声明一个当前应用的静态实例
    // 声明一个公共的信息映射对象，可当作全局变量使用
    public HashMap<String, String> infoMap = new HashMap<String, String>();
    public static int goodsCount = 0;
    private Timer timer;

//    private CartDatabase cartDatabase; // 声明一个购物车数据库对象
//    private GoodsDatabase goodsDatabase; // 声明一个商品数据库对象

    // 利用单例模式获取当前应用的唯一实例
    public static MainApplication getInstance() {
        return mApp;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate");
        mApp = this; // 在打开应用时对静态的应用实例赋值
        // 构建购物车数据库的实例（使用新的获取方式）
        CartDatabase.getDatabase(this);
        // 构建商品数据库的实例（使用新的获取方式）
        GoodsDatabase.getDatabase(this);
//        // 构建购物车数据库的实例
//        cartDatabase = Room.databaseBuilder(mApp, CartDatabase.class,"CartInfo")
//                .addMigrations().allowMainThreadQueries().build();
//        // 构建商品数据库的实例
//        goodsDatabase = Room.databaseBuilder(mApp, GoodsDatabase.class,"GoodsInfo")
//                .addMigrations().allowMainThreadQueries().build();
        // 初始化内存数据库和云端同步
        DBManager dbManager = DBManager.getInstance(this);
        timer = new Timer();
        timer.schedule(new UpLoader(dbManager.getCartDatabase()), 0, 10 * 60 * 1000); // 每10分钟同步一次
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        Log.d(TAG, "onTerminate");
        if (timer != null) {
            // 检查定时器是否已初始化且不为 null
            timer.cancel(); // 取消定时器，停止所有定时任务的执行
        }
        syncCartToCloud(); // 在应用终止时同步购物车数据到云端
    }
    // 获取购物车数据库的实例（更新为使用新的获取方式）
    public CartDatabase getCartDB() {
        return CartDatabase.getDatabase(this);
    }

    // 获取商品数据库的实例（更新为使用新的获取方式）
    public GoodsDatabase getGoodsDB() {
        return GoodsDatabase.getDatabase(this);
    }
    // 同步购物车数据到云端的方法
    private void syncCartToCloud() {
        Log.d(TAG, "Syncing cart to cloud...");
        CartDatabase cartDatabase = getCartDB();
        UpLoader uploader = new UpLoader(cartDatabase);
        uploader.run(); // 调用 UpLoader 的 run 方法进行同步
    }
//    // 获取购物车数据库的实例
//    public CartDatabase getCartDB(){
//        return cartDatabase;
//    }
//
//    // 获取商品数据库的实例
//    public GoodsDatabase getGoodsDB(){
//        return goodsDatabase;
//    }
}
